From b5f62886a960a077b4e2873501e62d771849bc7c Mon Sep 17 00:00:00 2001 From: =?utf8?q?T=C3=A9o=20Mazars?= Date: Thu, 20 Jun 2013 20:16:17 +0200 Subject: [PATCH] extensions: Make HSV works on perceptual color space --- extensions/HSV.c | 13 +++++++------ tests/hsva.c | 36 ++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/extensions/HSV.c b/extensions/HSV.c index 6c66f42..67e489f 100644 --- a/extensions/HSV.c +++ b/extensions/HSV.c @@ -26,6 +26,7 @@ #include #include "babl.h" +#include "base/util.h" #define MIN(a,b) (a > b) ? b : a; #define MAX(a,b) (a < b) ? b : a; @@ -94,9 +95,9 @@ rgba_to_hsva (char *src, while (n--) { - double red = ((double *) src)[0]; - double green = ((double *) src)[1]; - double blue = ((double *) src)[2]; + double red = linear_to_gamma_2_2 (((double *) src)[0]); + double green = linear_to_gamma_2_2 (((double *) src)[1]); + double blue = linear_to_gamma_2_2 (((double *) src)[2]); double alpha = ((double *) src)[3]; double hue, saturation, value; @@ -214,9 +215,9 @@ hsva_to_rgba (char *src, green += min; blue += min; - ((double *) dst)[0] = red; - ((double *) dst)[1] = green; - ((double *) dst)[2] = blue; + ((double *) dst)[0] = gamma_2_2_to_linear (red); + ((double *) dst)[1] = gamma_2_2_to_linear (green); + ((double *) dst)[2] = gamma_2_2_to_linear (blue); ((double *) dst)[3] = alpha; src += 4 * sizeof (double); diff --git a/tests/hsva.c b/tests/hsva.c index a973ea5..a29f506 100644 --- a/tests/hsva.c +++ b/tests/hsva.c @@ -60,24 +60,24 @@ main (int argc, { int OK = 1; - float rgba[][4] = {{ 1.0, 1.0, 1.0, 1.0 }, - { 0.5, 0.5, 0.5, 1.0 }, - { 0.0, 0.0, 0.0, 1.0 }, - { 1.0, 0.0, 0.0, 1.0 }, - { 0.749, 0.75, 0.0, 1.0 }, - { 0.0, 0.5, 0.0, 1.0 }, - { 0.5, 1.0, 1.0, 1.0 }, - { 0.5, 0.5, 1.0, 1.0 }, - { 0.75, 0.25, 0.75, 1.0 }, - { 0.627, 0.643, 0.142, 1.0 }, - { 0.256, 0.104, 0.918, 1.0 }, - { 0.116, 0.675, 0.255, 1.0 }, - { 0.941, 0.783, 0.053, 1.0 }, - { 0.704, 0.187, 0.897, 1.0 }, - { 0.931, 0.463, 0.316, 1.0 }, - { 0.998, 0.974, 0.532, 1.0 }, - { 0.099, 0.795, 0.591, 1.0 }, - { 0.211, 0.149, 0.597, 1.0 }}; + float rgba[][4] = {{ 1.0, 1.0, 1.0, 1.0 }, + { 0.2140, 0.2140, 0.2140, 1.0 }, + { 0, 0, 0, 1.0 }, + { 1, 0, 0, 1.0 }, + { 0.5209, 0.5225, 0, 1.0 }, + { 0, 0.2140, 0, 1.0 }, + { 0.2140, 1, 1, 1.0 }, + { 0.2140, 0.2140, 1, 1.0 }, + { 0.5215, 0.0508, 0.5225, 1.0 }, + { 0.3509, 0.3710, 0.0178, 1.0 }, + { 0.0533, 0.0106, 0.8235, 1.0 }, + { 0.0126, 0.4132, 0.0529, 1.0 }, + { 0.8709, 0.5754, 0.0042, 1.0 }, + { 0.4537, 0.0291, 0.7814, 1.0 }, + { 0.8501, 0.1813, 0.0814, 1.0 }, + { 0.9954, 0.9418, 0.2448, 1.0 }, + { 0.0099, 0.5953, 0.3081, 1.0 }, + { 0.0366, 0.0193, 0.3150, 1.0 }}; float hsva[][4] = {{ 0.0, 0.0, 1.0, 1.0 }, { 0.0, 0.0, 0.5, 1.0 }, -- 2.30.2